<!DOCTYPE html>
<html lang="en">
	<head>
		<title>HttpServer3: Changelog</title>
		<style>
			@import url("assets/layout.css");
		</style>
	</head>
	<body>
		<center>
			<a href="/">
				<img decoding="async" loading="lazy" src="assets/logo.png" />
			</a>
			<h2 style="margin-top: 0px">Changelog</h2>
		</center>
		<h3>3.0.6</h3>
		<code>
			- Decoupled Response from the HttpServer3 class. <br />
			&nbsp;This will break ANY HttpPage user. <br />
			- Decoupled ReadRequest from the HttpServer3 class. <br />
			&nbsp;This will break ANY SSE (Server-Sent Events) user. <br />
			- Decoupled ByteReadRange from the HttpServer3 class. <br />
			&nbsp;This will break ANY user of BRRs. <br />
			- Decoupled ErrorStates from the HttpServer3 class. <br />
			- Removed the NX branch. <br />
			&nbsp;A 3x_rewrite will soon be started. <br />
			- Improvements to the HTTP Keep-Alive behaviour. <br />
			- Removed the "prefer_constant_connections" flag. <br />
			- Changed the values that the Keep-Alive header provides. <br />
			- Disabled Content-Length guessing by default. <br />
			- Added the "response_guess_content_length" flag to re-enable Content-Length guessing and use a new and more refined algorithm. <br />
			- DEFLATE compression is now RFC 1950 and 1951 compliant. <br />
			- Removed LZMA support. <br />
			- Disabled SO_LINGER by default. (again) <br />
			- Added the experimental "enable_early_socket_close" flag. <br />
			- Requests without a "Host" header will now throw an error 400. <br />
			- Requests using a non-standard METHOD will now throw an error 400. <br />
			- Improved the HTTPS security of HttpServer3. <br />
			&nbsp;- SSL is no longer enabled, the minimum is TLS 1.0. <br />
			&nbsp;- Insecure ciphers are now disabled. <br />
			&nbsp;- Server cipher order is enabled by default. <br />
			&nbsp;- setEndpointIdentificationAlgorithm is now configured. <br />
			&nbsp;- Configure ALPN for HTTP/1.1 <br />
			- Removed support for STTP 1.0 (now known as 0.1) <br />
			&nbsp;It has seen no development and will one day be replaced by 0.2. <br />
			- Removed the dedicated thread pool for the HTTP and HTTPS sockets. <br />
			- Minor tweaks to buffer sizes. <br />
			- Keep-Alive is now disabled when there is no declared Content-Length. <br />
			- Removed the useBufferedOutput setting. <br />
		</code>
		<h3>3.0.5</h3>
		<code>
			- Enable NIO magic for HTTP only (Linux and Solaris only) <br />
			&nbsp;Basically, we're using blocking NIO instead of regular Java IO. <br />
			- Use buffering on output again. <br />
			- Re-enable TCP_NO_DELAY by default, my benchmarking is all over the place, send help. <br />
			- Added some comments to the Request API methods. """documentation""" <br />
			- Move socket options phase to the dedicated client thread. <br />
			- Request: Added an API for the following: <br />
			&nbsp;- Reading the protocol used <br />
			&nbsp;- Reading the scheme used <br />
			&nbsp;- Reading if a secure or insecure connection is used <br />
			&nbsp;- Reading the Send and Receive buffer sizes. <br />
			&nbsp;- Reading the TLS version. <br />
			&nbsp;- Reading the TLS cipher used. <br />
			- Switch to attemptable-async to bail ship quicker if the executor becomes too overloaded. <br />
			&nbsp;<b>NOTE</b>: This requires an executor with EEX_executor_attemptable_submissions2 support. <br />
			- Add an option to use adaptive TCP SNDBUF and RCVBUF windows. <br />
			- Use more "Connection: close" signalling where possible. <br />
			- Fix faulty header reading. <br />
			- Bug fixes for data copying. <br />
			- Bug fixes for chunked transfers. <br />
			- Removed the "Old I/O buffers" flag. <br />
			&nbsp;The InputReader replacement is buggy and isn't designed to operate on an InputStream interface, making it worthless.<br />
			&nbsp;It has been removed and the old I/O buffers logic is now always in use.<br />
			- Improved the SSLBehaviour logic.<br />
			- Beginning of "Operation Clean The Codebase"<br />
			&nbsp;This is expected to take three to five releases.<br />
			- EnhancedSecurityChecks.ONLY_ALLOW_BASIC_METHODS now allows the OPTIONS method.<br />
		</code>
		<h3>3.0.4</h3>
		<code>
			- Implement proper chunking support. (Works with compression too!)<br />
			- Disable TCP_NO_DELAY by default, making it strictly opt-in.<br />
			- Use a SO_TIMEOUT hint by default.<br />
			- Add experimental but working HTTP 2.0 support.<br />
			- Add support for HSTS. (No pre-loading yet)<br />
		</code>
		<h3>3.0.3</h3>
		<code>
			- Add CORS, COOP and COEP support.<br />
			- Use SO_RCVBUF as the buffer size on the input path.<br />
			- Use SO_SNDBUF as the buffer size on the output path.<br />
			- Add HttpServer on JS.<br />
			- Add HttpServer on BF.<br />
			- Rename settings::enableSoLingerPatch -> settings::enableSoLinger<br />
			- Enable 'enableSoLinger' by default.<br />
			- Refractor 'enableSoLingerPatch'<br />
			- Add 'enableAddressReuse' and enable by default.<br />
			- Fix 'Use CR+LF when using PrintWriters.' breaking Windows-based servers. (and clients)<br />
		</code>
		<h3>3.0.2</h3>
		<code>
			- Improve the conformance of HTTP/1.1.<br />
			- Use CR+LF when using PrintWriters.<br />
			- Remove some redundant flushes.<br />
			- Add experiments to reduce flushes even further.<br />
			&nbsp;<b>WARNING</b>: This may not be conformant to HTTP/1.1 yet, use with caution.<br />
			- Add use_migz_for_gzip experiment.<br />
		</code>
		<h3>3.0.1</h3>
		<code>
			- Fixes for older web browsers and for ranged requests.<br />
			- Improve timeout and dead request handling.<br />
			- Allow NIOCopyable/Copyable to be used within the cached pages.<br />
			- Begin working on NX (aka the NIO eXperiment version)<br />
			- Add support for Early-Hints (RFC 8297)<br />
		</code>
		<h3>3.0.0</h3>
		<code>
			Initial release. <br />
			See the "upgrading from v2" section for more details.
		</code>
	</body>
</html>
